home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 076-100 / 077 / samples / strings.d < prev    next >
Text File  |  1995-03-13  |  1KB  |  69 lines

  1. #include:util.g
  2.  
  3. int
  4.     DEFAULTMINLENGTH = 4,
  5.     MAXLENGTH = 255;
  6.  
  7. proc main()void:
  8.     channel input binary chin;
  9.     file() fyle;
  10.     *char par;
  11.     byte b;
  12.     ushort minLength, length, i;
  13.     bool inString;
  14.     [MAXLENGTH] char buffer;
  15.  
  16.     par := GetPar();
  17.     if par = nil then
  18.     writeln("Use is: strings [-n] file1 ... fileN");
  19.     exit(1);
  20.     fi;
  21.     minLength := DEFAULTMINLENGTH;
  22.     if par* = '-' and (par + 1)* >= '0' and (par + 1)* <= '9' then
  23.     minLength := (par + 1)* - '0';
  24.     par := GetPar();
  25.     fi;
  26.     if par = nil then
  27.     writeln("Use is: strings [-n] file1 ... fileN");
  28.     exit(1);
  29.     fi;
  30.     while par ~= nil do
  31.     if not open(chin, fyle, par) then
  32.         writeln(par, ": does not exist.\r\n");
  33.     else
  34.         inString := false;
  35.         while read(chin; b) do
  36.         if b >= 0x20 and b <= 0x7e then
  37.             if not inString then
  38.             inString := true;
  39.             length := 0;
  40.             fi;
  41.             if length = MAXLENGTH - 1 then
  42.             for i from 0 upto MAXLENGTH - 20 do
  43.                 write(buffer[i]);
  44.             od;
  45.             for i from MAXLENGTH - 19 upto MAXLENGTH - 2 do
  46.                 buffer[i - (MAXLENGTH - 19)] := buffer[i];
  47.             od;
  48.             length := 18;
  49.             fi;
  50.             buffer[length] := b + '\e';
  51.             length := length + 1;
  52.         else
  53.             if inString then
  54.             if length >= minLength then
  55.                 for i from 0 upto length - 1 do
  56.                 write(buffer[i]);
  57.                 od;
  58.                 writeln();
  59.             fi;
  60.             inString := false;
  61.             fi;
  62.         fi;
  63.         od;
  64.         close(chin);
  65.     fi;
  66.     par := GetPar();
  67.     od;
  68. corp;
  69.